
#include "CamaElastica.h"
#include "../FabricasObjetosJuego.h"

CamaElastica::CamaElastica(int x, int y, int maximoX, int maximoY) : ObjetoEstatico(x, y, maximoX, maximoY) {
	
	tipo = OBSTACULO;
}

void CamaElastica::ColisionarConPersonaje(ObjetoEstatico* personaje, int colX, int colY, int colXvieja, int colYvieja) {

	Personaje* per = dynamic_cast<Personaje*> (personaje);

	int ZONA_COLISION_X = per->getAncho() * 0.1;
	int ZONA_COLISION_Y = per->getAlto() * 0.1;

	if (colXvieja != 0) {
		if (per->getVelocidadY() < 0) {
			per->setPosicion(per->getX(), getY() - per->getAlto() - 2);
			if (per->getEstadoSalto() == 2) {
				if (per->getVelocidadY() > -100) per->setVelocidadY(per->getVelocidadY() * (-1.2));
				else per->setVelocidadY (- per->getVelocidadY());
			} else {
				per->setPosicion(per->getX(), getY() - per->getAlto());
				per->setVelocidadY(CONST_ELASTICA);
			}
			per->setEstado(EstadoBasico::Saltando);
		}
		else {
			per->setVelocidadY(per->getVelocidadY() * (-1));
			per->setPosicion(per->getX(), getY() + getAlto() - ZONA_COLISION_Y);
		}
	}
	else if (colYvieja !=0) {
		if (per->getVelocidadX() < 0) per->setPosicion(getX() + getAncho() - ZONA_COLISION_X, per->getY());
		else per->setPosicion(getX() - per->getAncho() + ZONA_COLISION_X, per->getY());
	}
	else {
		if (colX >= colY) {
			if (per->getVelocidadY() < 0) {
				per->setPosicion(per->getX(), getY() - per->getAlto() - 2);
				if (per->getEstadoSalto() == 2) {
					if (per->getVelocidadY() > -100) per->setVelocidadY(per->getVelocidadY() * (-1.2));
					else per->setVelocidadY (- per->getVelocidadY());
				} else {
					per->setPosicion(per->getX(), getY() - per->getAlto());
					per->setVelocidadY(CONST_ELASTICA);
				}
				per->setEstado(EstadoBasico::Saltando);
			}
			else {
				per->setVelocidadY(per->getVelocidadY() * (-1));
				per->setPosicion(per->getX(), getY() + getAlto() - ZONA_COLISION_Y);
			}
		}
		else {
			if (per->getVelocidadX() < 0) per->setPosicion(getX() + getAncho() - ZONA_COLISION_X, per->getY());
			per->setPosicion(getX() - per->getAncho() + ZONA_COLISION_X, per->getY());
		}
	}
}

void CamaElastica::ColisionarConEnemigo(ObjetoEstatico* movible, int colX, int colY, int colXvieja, int colYvieja) {

	ObjetoMovible* mov = dynamic_cast<ObjetoMovible*> (movible);

	int ZONA_COLISION_Y = static_cast<ObjetoMovible*> (movible)->getAlto() * 0.1;

	if (colXvieja != 0) {
		if (mov->getVelocidadY() <= 0) {
			mov->setPosicion(mov->getX(), getY() - mov->getAlto() - 2);
			mov->setVelocidadY(mov->getVelocidadY() * (-1.2));
		}
		else {
			mov->setVelocidadY(mov->getVelocidadY() * (-1));
			mov->setPosicion(mov->getX(), getY() + getAlto() - ZONA_COLISION_Y);
		}
	}
	else if (colYvieja !=0 ) mov->CambiarSentido(getX(), getAncho());

	else {
		if (colX >= colY) {
			if (mov->getVelocidadY() < 0) {
				mov->setVelocidadY(0);
				mov->setPosicion(mov->getX(), getY() - mov->getAlto());
			}
			else {
				mov->setVelocidadY(mov->getVelocidadY() * (-1));
				mov->setPosicion(mov->getX(), getY() + getAlto() - ZONA_COLISION_Y);
			}
		}
		else mov->CambiarSentido(getX(), getAncho());
	}
}
